#include <stdio.h>

// 杨辉三角形
// 算法跟数学紧密相关,所以学好数学很重要
// 杨辉三角在这里的实现可以根据杨辉三角的规律来实现
// 1.该三角的每一项都是n项就有n个元素
// 2.该三角项里面的数字,除了首个和最后一个之外,都是上一项的同一位和前一位相加所得
// 利用这两个规律,就可以很容易地实现杨辉三角

int main ()
{

    int n = 0 ;

    scanf ("%d" , &n) ; // 输入需要求多大项的杨辉三角

    int triangle [n] [n] ; // 创建一个足够大的数组,用来存放杨辉三角

    for (int i = 0 ; i < n ; i++)
    {

        for (int k = 0 ; k <= i ; k++) // 这里循环的是每一项的元素个数,n项就有n个元素
        {

            if (k == 0 || i == k) // 判断是否在该项的边缘
            {

                triangle [i] [k] = 1 ;

            }

            else // 如果不满足是项边缘,则会利用规律来求得该项的具体数值
            {

                triangle [i] [k] = triangle [i - 1] [k] + triangle [i - 1] [k - 1] ;

            }            

        }

    }

    for (int j = 0 ; j < n ; j++) // 打印三角
    {

        for (int k = 0 ; k <= j ; k++)
        {

            printf ("%d " , triangle [j] [k]) ;

        }

        printf ("\n") ;

    }

    return 0 ;

}